/**
 * 优先队列
 */
module.exports = class PriorityQueue {
  constructor() {
    this.items = [];
  }

  /**
   * 入队
   * @param {number}} element 元素
   * @param {number} priority 优先级
   */
  enqueue(element, priority) {
    const queueElement = { element, priority };
    if (this.isEmpty) {
      this.items.push(queueElement);
      return;
    }

    for (let i = 0; i < this.items.length; i++) {
      const e = this.items[i];
      // 如果 queueElement 的优先级高
      if (queueElement.priority < e.priority) {
        this.items.splice(i, 0, queueElement);
        return;
      }
    }
    this.items.push(queueElement);
  }

  /**
   * 出队
   */
  dequeue() {
    return this.items.shift();
  }

  /**
   * 取队列头
   */
  front() {
    return this.items[0];
  }

  /**
   * 清空队列
   */
  clear() {
    this.items = [];
  }

  /**
   * 队列大小
   */
  get size() {
    return this.items.length;
  }

  /**
   * 队列是否为空
   */
  get isEmpty() {
    return !this.items.length;
  }

  /**
   * 打印队列
   */
  print() {
    this.items.forEach(v => {
      console.log(v);
    });
  }
};
